En este trabajo se abordará el problema de agrupar los barrios de Medellín de acuerdo a distintas dimensiones y analizar espacialmente las agrupaciones.
** Dimensión Movilidad **
La dimensión Movilidad mide determina en la encuesta de Calidad de Vida, cómo se mueven los Medellinenses. Asi mismo, el tiempo que les toma ir a trabajar, el medio de transporte predominante de las personas que trabajan y la percepción sobre la malla vial, cobertura y calidad del transporte público.
P_83 ¿Cuál es el medio de transporte utilizado predominante para dirigirse al sitio de su empleo principal?
P_84 ¿Cuánto tiempo tardan en llegar al sitio de trabajo?
P_212 ¿Cuántos vehículos particulares en funcionamiento tiene este hogar? (no incluye vehículo de servicio público o utilizado para generar ingresos) Vehiculo o auto
P_213 ¿Cuántos vehículos particulares en funcionamiento tiene este hogar? (no incluye vehículo de servicio público o utilizado para generar ingresos) Moto o motoneta
P_214 ¿Cuántos vehículos particulares en funcionamiento tiene este hogar? (no incluye vehículo de servicio público o utilizado para generar ingresos) Bicicleta
P_318 Califique Usted en una escala desde 1 hasta 5, la situación en su barrio o vereda, sobre: La pavimentación y señalización de las vias
P_321 Califique Usted, en una escala desde 1 hasta 5, la cobertura en el transporte público en su sector, barrio o vereda en los últimos 12 meses
P_322 Y califique en una escala desde 1 hasta 5, la calidad de ese transporte público en su sector, barrio o vereda
Librerias escenciales para el analisis de informacion
library(dplyr)
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
library(ggplot2)
library(Utiltae)
library(lazyeval)
library('sqldf')
## Loading required package: gsubfn
## Loading required package: proto
## Loading required package: RSQLite
library(rgdal)
## Loading required package: sp
## rgdal: version: 1.4-8, (SVN revision 845)
## Geospatial Data Abstraction Library extensions to R successfully loaded
## Loaded GDAL runtime: GDAL 2.2.3, released 2017/11/20
## Path to GDAL shared files: C:/Users/sanar/OneDrive/Documentos/R/win-library/3.6/rgdal/gdal
## GDAL binary built with GEOS: TRUE
## Loaded PROJ.4 runtime: Rel. 4.9.3, 15 August 2016, [PJ_VERSION: 493]
## Path to PROJ.4 shared files: C:/Users/sanar/OneDrive/Documentos/R/win-library/3.6/rgdal/proj
## Linking to sp version: 1.3-2
El insumo principal de este trabajo son los datos abiertos del portal Medata y en particular la Encuesta de Calidad de Vida Medellín Cómo vamos.
ECV <- read.csv("./dataSet/encuesta_calidad_vida.csv", header = TRUE, sep=";", encoding = "UTF-8")
Se procede a normalizar las cabeceras del dataframe del set de datos
ECV <- setNames(ECV,set_dataSet_names(names(ECV)))
#summary(ECV)
Para la dimensión de MOVILIDAD se toman las preguntas: P_83 ¿Cuál es el medio de transporte utilizado predominante para dirigirse al sitio de su empleo principal? P_84 ¿Cuánto tiempo tardan en llegar al sitio de trabajo? P_212 ¿Cuántos vehículos particulares en funcionamiento tiene este hogar? (no incluye vehículo de servicio público o utilizado para generar ingresos) Vehiculo o auto P_213 ¿Cuántos vehículos particulares en funcionamiento tiene este hogar? (no incluye vehículo de servicio público o utilizado para generar ingresos) Moto o motoneta P_214 ¿Cuántos vehículos particulares en funcionamiento tiene este hogar? (no incluye vehículo de servicio público o utilizado para generar ingresos) Bicicleta P_318 Califique Usted en una escala desde 1 hasta 5, la situación en su barrio o vereda, sobre: La pavimentación y señalización de las vias P_321 Califique Usted, en una escala desde 1 hasta 5, la cobertura en el transporte público en su sector, barrio o vereda en los últimos 12 meses P_322 Y califique en una escala desde 1 hasta 5, la calidad de ese transporte público en su sector, barrio o vereda
ECV_MOVILIDAD<- ECV[,c("encuesta","comuna","barrio","estrato","p_83","p_84","p_212","p_213","p_214","p_318","p_321","p_322")]
Revisemos como es el comportamiento de los datos seleccionados
summary(ECV_MOVILIDAD)
## encuesta comuna barrio
## Min. :1.201e+04 MANRIQUE : 28951 CABECERA SAN ANT DE PR. : 8987
## 1st Qu.:5.812e+07 BELEN : 26330 LAS GRANJAS : 5192
## Median :4.713e+08 ARANJUEZ : 24860 MORAVIA : 4537
## Mean :1.424e+09 POPULAR : 22587 SANTO DOMINGO SABIO Nº 1: 4152
## 3rd Qu.:1.592e+09 ROBLEDO : 22051 POPULAR : 4027
## Max. :7.489e+09 DOCE DE OCTUBRE: 21787 CASTILLA : 3873
## (Other) :184008 (Other) :299806
## estrato p_83 p_84 p_212
## Min. :1.000 Min. :-99.00 Min. :-99.00 Min. :0.0000
## 1st Qu.:2.000 1st Qu.:-88.00 1st Qu.:-88.00 1st Qu.:0.0000
## Median :2.000 Median :-88.00 Median :-88.00 Median :0.0000
## Mean :2.701 Mean :-51.65 Mean :-51.92 Mean :0.1965
## 3rd Qu.:3.000 3rd Qu.: 4.00 3rd Qu.: 1.00 3rd Qu.:0.0000
## Max. :6.000 Max. : 12.00 Max. : 5.00 Max. :6.0000
##
## p_213 p_214 p_318 p_321
## Min. :0.0000 Min. :0.0000 Min. :1.000 Min. :1.000
## 1st Qu.:0.0000 1st Qu.:0.0000 1st Qu.:3.000 1st Qu.:4.000
## Median :0.0000 Median :0.0000 Median :4.000 Median :4.000
## Mean :0.2356 Mean :0.2596 Mean :3.402 Mean :3.828
## 3rd Qu.:0.0000 3rd Qu.:0.0000 3rd Qu.:4.000 3rd Qu.:4.000
## Max. :5.0000 Max. :9.0000 Max. :5.000 Max. :5.000
##
## p_322
## Min. :1.000
## 1st Qu.:4.000
## Median :4.000
## Mean :3.808
## 3rd Qu.:4.000
## Max. :5.000
##
Eliminamos las filas dónde todas las columnas sean NULL
ECV_MOVILIDAD_DEP <- subset(ECV_MOVILIDAD,p_83 != 'NULL' & p_84 != 'NULL' & p_212 != 'NULL' & p_213 != 'NULL' & p_214 != 'NULL' & p_318 != 'NULL' & p_321 != 'NULL' & p_322 != 'NULL')
nrow(ECV_MOVILIDAD_DEP)
## [1] 330574
summary(ECV_MOVILIDAD_DEP)
## encuesta comuna barrio
## Min. :1.201e+04 MANRIQUE : 28951 CABECERA SAN ANT DE PR. : 8987
## 1st Qu.:5.812e+07 BELEN : 26330 LAS GRANJAS : 5192
## Median :4.713e+08 ARANJUEZ : 24860 MORAVIA : 4537
## Mean :1.424e+09 POPULAR : 22587 SANTO DOMINGO SABIO Nº 1: 4152
## 3rd Qu.:1.592e+09 ROBLEDO : 22051 POPULAR : 4027
## Max. :7.489e+09 DOCE DE OCTUBRE: 21787 CASTILLA : 3873
## (Other) :184008 (Other) :299806
## estrato p_83 p_84 p_212
## Min. :1.000 Min. :-99.00 Min. :-99.00 Min. :0.0000
## 1st Qu.:2.000 1st Qu.:-88.00 1st Qu.:-88.00 1st Qu.:0.0000
## Median :2.000 Median :-88.00 Median :-88.00 Median :0.0000
## Mean :2.701 Mean :-51.65 Mean :-51.92 Mean :0.1965
## 3rd Qu.:3.000 3rd Qu.: 4.00 3rd Qu.: 1.00 3rd Qu.:0.0000
## Max. :6.000 Max. : 12.00 Max. : 5.00 Max. :6.0000
##
## p_213 p_214 p_318 p_321
## Min. :0.0000 Min. :0.0000 Min. :1.000 Min. :1.000
## 1st Qu.:0.0000 1st Qu.:0.0000 1st Qu.:3.000 1st Qu.:4.000
## Median :0.0000 Median :0.0000 Median :4.000 Median :4.000
## Mean :0.2356 Mean :0.2596 Mean :3.402 Mean :3.828
## 3rd Qu.:0.0000 3rd Qu.:0.0000 3rd Qu.:4.000 3rd Qu.:4.000
## Max. :5.0000 Max. :9.0000 Max. :5.000 Max. :5.000
##
## p_322
## Min. :1.000
## 1st Qu.:4.000
## Median :4.000
## Mean :3.808
## 3rd Qu.:4.000
## Max. :5.000
##
Definiciones:
Solucion de Preguntas - Consultas
Dimensión Movilidad.
P_83: ¿Cuál es el medio de transporte utilizado predominante para dirigirse al sitio de su empleo principal? Indicador: Porcentaje de personas que usan bicicleta para ir a su empleo principal Formula: Total de personas BICICLETA / Total Encuestados P_83 *100
# CAST((SUM(p_83) / totalEncuestadosE * 100) AS DOUBLE)
ECV_MOVILIDAD_P83 <- get_indicadores_ei(ECV_MOVILIDAD_DEP,'p_83')
CONS_P83 <- sqldf("SELECT comuna, barrio, CAST (SUM(totalRespuestaE) AS REAL) / TotalB *100 AS P83_IND
FROM ECV_MOVILIDAD_P83
WHERE p_83 = '2'
GROUP BY comuna, barrio")
#CONS_P83["ind"] <- CONS_P83$`SUM(totalRespuestaE)` / CONS_P83$TotalB * 100
P_84: ¿Cuánto tiempo tardan en llegar al sitio de trabajo? Indicador: Porcentaje de personas que tardan en llegar al trabajo mas de una hora Formula: Sumatoria de los tiempos / Total Encuestados P_84
ECV_MOVILIDAD_P84 <- get_indicadores_ei(ECV_MOVILIDAD_DEP,'p_84')
CONS_P84 <- sqldf("SELECT comuna, barrio, CAST (SUM(totalRespuestaE) AS REAL) / TotalB *100 AS P84_IND
FROM ECV_MOVILIDAD_P84
WHERE p_84 = '4' OR p_84 = '5'
GROUP BY comuna, barrio")
#CONS_P84["P84_IND"] <- CONS_P84$`SUM(totalRespuestaE)` / CONS_P84$TotalB * 100
P_212: ¿Cuántos vehículos particulares en funcionamiento tiene este hogar? (no incluye vehículo de servicio público o utilizado para generar ingresos) Vehiculo o auto Indicador: Promedio de vehiculos en el hogar (Vehiculo o auto) Formula: Sumatoria de las respuestas Vehiculo o auto / Total Encuestados P_212
ECV_MOVILIDAD_P212 <- get_indicadores_ec(ECV_MOVILIDAD_DEP,'p_212')
CONS_P212 <- sqldf("SELECT comuna, barrio, SUM(cast ((p_212) as real)*(totalRespuestaE))/TotalB AS P212_IND
FROM ECV_MOVILIDAD_P212
WHERE p_212 > 0
GROUP BY comuna, barrio")
#CONS_P212["ind"] <- CONS_P212$nuevo
P_213: ¿Cuántos vehículos particulares en funcionamiento tiene este hogar? (no incluye vehículo de servicio público o utilizado para generar ingresos) Moto o motoneta Indicador: Promedio de vehiculos en el hogar (Moto) Formula: Sumatoria de las respuestas Moto / Total Encuestados P_213
ECV_MOVILIDAD_P213 <- get_indicadores_ec(ECV_MOVILIDAD_DEP,'p_213')
CONS_P213 <- sqldf("SELECT comuna, barrio, SUM(cast ((p_213) as real)*(totalRespuestaE))/TotalB AS P213_IND
FROM ECV_MOVILIDAD_P213
WHERE p_213 > 0
GROUP BY comuna, barrio")
#CONS_P212["ind"] <- CONS_P213$`SUM(p_213)` / CONS_P213$`SUM(totalEncuestadosE)`
#ECV_MOVILIDAD_P213 %>% group_by(barrio) %>% summarise(sum(p_213 * totalRespuestaE)/sum(totalRespuestaE) ) -> data_hogar
P_214: ¿Cuántos vehículos particulares en funcionamiento tiene este hogar? (no incluye vehículo de servicio público o utilizado para generar ingresos) Bicicleta Indicador: Promedio de vehiculos en el hogar (Bicicleta) Formula: Sumatoria de las respuestas Bicicleta / Total Encuestados P_214
ECV_MOVILIDAD_P214 <- get_indicadores_ec(ECV_MOVILIDAD_DEP,'p_214')
CONS_P214 <- sqldf("SELECT comuna, barrio, SUM(cast ((p_214) as real)*(totalRespuestaE))/TotalB AS P214_IND
FROM ECV_MOVILIDAD_P214
WHERE p_214 > 0
GROUP BY comuna, barrio")
P_318: Califique Usted en una escala desde 1 hasta 5, la situación en su barrio o vereda, sobre: La pavimentación y señalización de las vias Indicador: Calificación promedio del estado de la infraestrucutra vial Formula: Sumatoria de las Calificaciones / Total Encuestados P_318
ECV_MOVILIDAD_P318 <- get_indicadores_ei(ECV_MOVILIDAD_DEP,'p_318')
CONS_P318 <- sqldf("SELECT comuna, barrio, SUM(cast ((p_318) as real)*(totalRespuestaE)) / sum(totalRespuestaE) AS P318_IND
FROM ECV_MOVILIDAD_P318
WHERE p_318 > 0
GROUP BY comuna, barrio")
P_321: Califique Usted, en una escala desde 1 hasta 5, la cobertura en el transporte público en su sector, barrio o vereda en los últimos 12 meses Indicador: Calificación promedio de la cobertura del transporte público Formula: Sumatoria de las respuestas “Muy buena” / Total Encuestados P_321 *100
ECV_MOVILIDAD_P321 <- get_indicadores_ei(ECV_MOVILIDAD_DEP,'p_321')
CONS_P321 <- sqldf("SELECT comuna, barrio, SUM(cast ((p_321) as real)*(totalRespuestaE)) / sum(totalRespuestaE) AS P321_IND
FROM ECV_MOVILIDAD_P321
WHERE p_321 > 0
GROUP BY comuna, barrio")
P_322: Y califique en una escala desde 1 hasta 5, la calidad de ese transporte público en su sector, barrio o vereda Indicador: Porcentaje de personas que piensan que la calidad del transporte publico en el sector es “Aceptable” Formula: Sumatoria de las respuestas Aceptable" / Total Encuestados P_322 *100
ECV_MOVILIDAD_P322 <- get_indicadores_ei(ECV_MOVILIDAD_DEP,'p_322')
CONS_P322 <- sqldf("SELECT comuna, barrio, SUM(cast ((p_322) as real)*(totalRespuestaE)) / sum(totalRespuestaE) AS P322_IND
FROM ECV_MOVILIDAD_P322
WHERE p_322 > 0
GROUP BY comuna, barrio")
ECV_MOVILIDAD_FINAL <- data.frame(unique(ECV_MOVILIDAD[,c("comuna", "barrio")]))
ECV_MOVILIDAD_FINAL <- merge(ECV_MOVILIDAD_FINAL, CONS_P83, by = c("comuna", "barrio"), all.x = TRUE)
ECV_MOVILIDAD_FINAL <- merge(ECV_MOVILIDAD_FINAL, CONS_P84, by = c("comuna", "barrio"), all.x = TRUE)
ECV_MOVILIDAD_FINAL <- merge(ECV_MOVILIDAD_FINAL, CONS_P212, by = c("comuna", "barrio"), all.x = TRUE)
ECV_MOVILIDAD_FINAL <- merge(ECV_MOVILIDAD_FINAL, CONS_P213, by = c("comuna", "barrio"), all.x = TRUE)
ECV_MOVILIDAD_FINAL <- merge(ECV_MOVILIDAD_FINAL, CONS_P214, by = c("comuna", "barrio"), all.x = TRUE)
ECV_MOVILIDAD_FINAL <- merge(ECV_MOVILIDAD_FINAL, CONS_P318, by = c("comuna", "barrio"), all.x = TRUE)
ECV_MOVILIDAD_FINAL <- merge(ECV_MOVILIDAD_FINAL, CONS_P321, by = c("comuna", "barrio"), all.x = TRUE)
ECV_MOVILIDAD_FINAL <- merge(ECV_MOVILIDAD_FINAL, CONS_P322, by = c("comuna", "barrio"), all.x = TRUE)
ECV_MOVILIDAD_FINAL[is.na(ECV_MOVILIDAD_FINAL)] <- 0
ECV_MOVILIDAD_FINAL$barrio <- paste(ECV_MOVILIDAD_FINAL$comuna, ECV_MOVILIDAD_FINAL$barrio, sep = "/")
ECV_MOVILIDAD_FINAL$comuna <- NULL
Fin Preguntas
Agrupamiento
K-MEANS
Normalizamos los datos
ECV_MOVILIDAD_SCALE <- tibble::column_to_rownames(ECV_MOVILIDAD_FINAL, var = ("barrio"))
ECV_MOVILIDAD_SCALE <- scale(ECV_MOVILIDAD_SCALE)
#any(is.na(ECV_MOVILIDAD_FINAL))
#any(is.finite(ECV_VIVIENDA_BARRIO_SCALE))
Método del codo para determinar el k optimo
library(factoextra)
## Welcome! Want to learn more? See two factoextra-related books at https://goo.gl/ve3WBa
# Elbow method
fviz_nbclust(ECV_MOVILIDAD_SCALE, kmeans, method = "wss") +
geom_vline(xintercept = 4, linetype = 2)+
labs(subtitle = "Elbow method")
De acuerdo a la gráfica, donde se da el k con el mínimo error es cuando toma el valor de 4
Método de la siluetta para determinar el k óptimo
fviz_nbclust(ECV_MOVILIDAD_SCALE, kmeans, method = "silhouette")
De acuerdo a la gráfica, donde se da el k con el mínimo error es cuando toma el valor de 2
# Gap statistic
# nboot = 50 to keep the function speedy.
# recommended value: nboot= 500 for your analysis.
# Use verbose = FALSE to hide computing progression.
# The gap statistic compares the total intracluster variation for different values of k with their expected values under null reference distribution of the data (i.e. a distribution with no obvious clustering). The reference dataset is generated using Monte Carlo simulations of the sampling process.
set.seed(123)
fviz_nbclust(ECV_MOVILIDAD_SCALE, kmeans, nstart = 50, method = "gap_stat", nboot = 50)+
labs(subtitle = "Gap statistic method")
SS <- fviz_nbclust(ECV_MOVILIDAD_SCALE, kmeans, nstart = 50, method = "wss", nboot = 50)
plot(2:10, diff(SS$data$y), type="h", main="Diferencia de Errores", xlab="k", ylab="diff")
Aplicamos K-MEANS para el k recomendado por el método del codo
set.seed(42)
kmeans_model <- kmeans(ECV_MOVILIDAD_SCALE, 5, nstart = 50)
#kmeans_model
Agregar el cluster a la data original
df_member <- cbind(ECV_MOVILIDAD_FINAL, cluster = kmeans_model$cluster)
head(df_member)
Visualización de los grupos
fviz_cluster(kmeans_model, data = ECV_MOVILIDAD_SCALE, geom = "point")
fviz_cluster(kmeans_model, ECV_MOVILIDAD_SCALE, ellipse.type = "norm", geom = "point")
## Too few points to calculate an ellipse
## Too few points to calculate an ellipse
# Cluster size
kmeans_model$size
## [1] 173 2 101 33 1
aggregate(ECV_MOVILIDAD_FINAL, by=list(cluster=kmeans_model$cluster), mean)
## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA
## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA
## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA
## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA
## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA
Mapas
library(stringr)
library(tidyr)
#df_ <- str_split_fixed(df_member$barrio, "-", 2)
#head(df_)
#within(df_member, FOO<-data.frame(do.call('rbind', strsplit(as.character(df_member$barrio), '-', fixed=TRUE))))
df_member2 <- separate(df_member, 'barrio', paste("barrio", 1:2, sep="_"), sep="/", extra="drop")
barrios_med <- readOGR("Barrio_Vereda/Barrio_Vereda.shp",layer="Barrio_Vereda")
## OGR data source with driver: ESRI Shapefile
## Source: "D:\UNAL\Tecnicas de aprendizaje estadistico\Trabajo 1\TAE_T1\Barrio_Vereda\Barrio_Vereda.shp", layer: "Barrio_Vereda"
## with 332 features
## It has 6 fields
## Integer64 fields read as strings: OBJECTID SUBTIPO_BA
nombres_barrios <- iconv(barrios_med@data$NOMBRE,"UTF-8","ISO_8859-1")
#head(nombres_barrios)
sub_ <- df_member2[,c("barrio_2","cluster")]
rownames(sub_) <- NULL
#head(sub_)
Convertimos a minúsculas
sub_$barrio_2 <- tolower(sub_$barrio_2)
#head(sub_)
#sub_$barrio_2[which(sub_$barrio_2=="º ")] <- "o."
# Create replacements data frame
library(DataCombine)
Replaces <- data.frame(from = c("º ", "ú", "ó", "í", "é", "á", "Á", "ñ"), to = c("o.", "ú", "ó", "Ã", "é", "á", "Ã\u0081", "ñ"))
sub_ <- FindReplace(data = sub_, Var = "barrio_2", replaceData = Replaces,
from = "from", to = "to", exact = FALSE)
head(sub_)
Caps <- function(x) {
s <- strsplit(x, " ")[[1]]
paste(toupper(substring(s, 1,1)), substring(s, 2),
sep="", collapse=" ")
}
sub_$barrio_2 <- sapply(sub_$barrio_2, Caps)
#head(sub_)
sub_$barrio_2[sub_$barrio_2 == "Barrios De Jesús"] <- "Barrios de Jesús"
sub_$barrio_2[sub_$barrio_2 == "Piedras Blancas"] <- "Piedras Blancas - Matasano"
sub_$barrio_2[sub_$barrio_2 == "Area Expansion San Antonio De Prado"] <- "Ã\u0081rea de Expansión San Antonio de Prado"
sub_$barrio_2[sub_$barrio_2 == "Prado"] <- "San Antonio de Prado"
sub_$barrio_2[sub_$barrio_2 == "Altavista Central"] <- "Altavista Sector Central"
sub_$barrio_2[sub_$barrio_2 == "San José Del Manzanillo"] <- "San José del Manzanillo"
sub_$barrio_2[sub_$barrio_2 == "El Yolombo"] <- "Yolombo"
sub_$barrio_2[sub_$barrio_2 == "Urquita"] <- "Urquitá"
sub_$barrio_2[sub_$barrio_2 == "Corregimiento Palmitas"] <- "Palmitas Sector Central"
sub_$barrio_2[sub_$barrio_2 == "San Jose De La Montaña"] <- "San José de La Montaña"
sub_$barrio_2[sub_$barrio_2 == "Cabecera San Cristóbal"] <- "Cabecera Urbana Corregimiento San Cristóbal"
sub_$barrio_2[sub_$barrio_2 == "Area Expansion Pajarito"] <- "Ãrea de Expansión Pajarito"
sub_$barrio_2[sub_$barrio_2 == "Area De Expancion San Cristobal"] <- "Ãrea de Expansión San Cristóbal"
sub_$barrio_2[sub_$barrio_2 == "Santa Maria De Los ángeles"] <- "Santa MarÃ�a de Los Ãngeles"
sub_$barrio_2[sub_$barrio_2 == "Juan Pablo Ii"] <- "Parque Juan Pablo II"
sub_$barrio_2[sub_$barrio_2 == "Bombona No.1"] <- "Bomboná No.1"
sub_$barrio_2[sub_$barrio_2 == "Bombona No.2"] <- "Bomboná No.2"
sub_$barrio_2[sub_$barrio_2 == "La Asomadera No.1"] <- "Asomadera No.1"
sub_$barrio_2[sub_$barrio_2 == "La Asomadera No.2"] <- "Asomadera No.2"
sub_$barrio_2[sub_$barrio_2 == "Los Cerros El Verjel"] <- "Los Cerros El Vergel"
sub_$barrio_2[sub_$barrio_2 == "Villa Tina"] <- "Villatina"
sub_$barrio_2[sub_$barrio_2 == "Santa Ines"] <- "Santa Inés"
sub_$barrio_2[sub_$barrio_2 == "Campo Valdes No.2"] <- "Campo Valdés No.2"
sub_$barrio_2[sub_$barrio_2 == "Progreso"] <- "El Progreso"
sub_$barrio_2[sub_$barrio_2 == "Progreso no.2"] <- "Progreso No.2"
sub_$barrio_2[sub_$barrio_2 == "Doce De Octubre No.1"] <- "Doce de Octubre No.1"
sub_$barrio_2[sub_$barrio_2 == "Doce De Octubre No.2"] <- "Doce de Octubre No.2"
sub_$barrio_2[sub_$barrio_2 == "Santo Domingo Sabio No.1"] <- "Santo Domingo Savio No.1"
sub_$barrio_2[sub_$barrio_2 == "Santo Domingo Sabio No.2"] <- "Santo Domingo Savio No.2"
sub_$barrio_2[sub_$barrio_2 == "Moscu No.1"] <- "Moscú No.1"
sub_$barrio_2[sub_$barrio_2 == "Moscu No.2"] <- "Moscú No.2"
sub_$barrio_2[sub_$barrio_2 == "San Josela Cima No.1"] <- "San José La Cima No.1"
sub_$barrio_2[sub_$barrio_2 == "San Jose La Cima No.2"] <- "San José La Cima No.2"
sub_$barrio_2[sub_$barrio_2 == "Villa Del Socorro"] <- "Villa del Socorro"
sub_$barrio_2[sub_$barrio_2 == "El Playon De Los Comuneros"] <- "Playón de Los Comuneros"
sub_$barrio_2[sub_$barrio_2 == "Santa Fe"] <- "Santa Fé"
sub_$barrio_2[sub_$barrio_2 == "Santa Rosa De Lima"] <- "Santa Rosa de Lima"
sub_$barrio_2[sub_$barrio_2 == "Alejandro EchavarrÃa"] <- "Alejandro EchavarrÃ�a"
sub_$barrio_2[sub_$barrio_2 == "Mira Flores"] <- "Miraflores"
sub_$barrio_2[sub_$barrio_2 == "Ocho De Marzo"] <- "Ocho de Marzo"
sub_$barrio_2[sub_$barrio_2 == "Villa Lilliam"] <- "Villa Liliam"
sub_$barrio_2[sub_$barrio_2 == "Altos Del Poblado"] <- "Altos del Poblado"
sub_$barrio_2[sub_$barrio_2 == "Villa Lilliam"] <- "Villa Liliam"
sub_$barrio_2[sub_$barrio_2 == "La Loma De Los Bernal"] <- "La Loma de Los Bernal"
sub_$barrio_2[sub_$barrio_2 == "área De Expansión Belén Rincón"] <- "Ãrea de Expansión Belén Rincón"
sub_$barrio_2[sub_$barrio_2 == "Carlos E Restrepo"] <- "Carlos E. Restrepo"
sub_$barrio_2[sub_$barrio_2 == "área De Expansión Belén Rincón"] <- "Ãrea de Expansión Belén Rincón"
library(dplyr)
# union two dataframes without duplicates
nom_bar <- merge(barrios_med, sub_[!duplicated(sub_$barrio_2), ], by.x="NOMBRE", by.y="barrio_2", all.x = TRUE)
names(nom_bar)
## [1] "NOMBRE" "OBJECTID" "CODIGO" "SUBTIPO_BA" "SHAPEAREA"
## [6] "SHAPELEN" "cluster"
nombres <- data.frame(nom_bar$NOMBRE)
print(sum(is.na(nom_bar$cluster)))
## [1] 67
library(leaflet)
m <-leaflet(nom_bar)
#factpal <- colorFactor(topo.colors(4), nom_bar$cluster)
factpal <- colorFactor(palette = c("blue", "yellow", "green", "red","purple"), levels = c("1", "2", "3", "4", "5"))
m <- addPolygons(m,popup=nombres_barrios, color=~factpal(cluster))
m <- addTiles(m)
m